﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data;
using System.Text;
using System.Data.Common;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Security.Cryptography;

namespace TwoGesture
{
    class Conexion
    {

        private SqlConnection conexionEstablecida = null;

        public SqlConnection Enlace()
        {
            try
            {
                string conexion = "Data Source=localhost;Initial Catalog=proyecto;Integrated Security=True";

                conexionEstablecida = new SqlConnection(conexion);
                
           }

            catch (Exception excepcion)
            {
                excepcion.ToString();
            }
            return conexionEstablecida;
        }

        public String IniciarSesion(String usuario, String contraseña)
        {
            String acceso = "";
            this.Enlace();
            conexionEstablecida.Open();
            String nueva = contraseña; //this.Encriptacion(contraseña);

            SqlCommand cmd = new SqlCommand("Select * from usuario where usuario=@usuario and contrasenia=@contrasenia and activo='1'", conexionEstablecida);
            cmd.Parameters.AddWithValue("@usuario", usuario);
            cmd.Parameters.AddWithValue("@contrasenia", nueva);

            SqlDataReader rdr = cmd.ExecuteReader();

            if (rdr == null)
            {
                MessageBox.Show("No existe el usuario o la contraseña es incorrecta");
                acceso = "negado";
            }
            else
            {
                int a = 0;
                String r = "";

                while (rdr.Read())
                {
                    a = a + 1;
                    r = rdr.GetString(7);
                }

                if (a == 1)
                {

                    //MessageBox.Show(r);
                    if (r == "Administrador")
                    {
                        acceso = r;
                    }
                    else if (r == "Usuario")
                    {
                        acceso = r;
                    }


                }
            }
            conexionEstablecida.Close();
            return acceso;
        }

        public void InsertarUsuario(String nombre, String apaterno, String amaterno, String usuario, String contraseña, String tipo)
        {
            this.Enlace();
            conexionEstablecida.Open();
            String nueva = this.Encriptacion(contraseña);
            SqlCommand sql = new SqlCommand("insert into usuario values(@nombre,@apaterno,@amaterno,@tipo,@usuario,@contrasenia)", conexionEstablecida);
            sql.Parameters.AddWithValue("@nombre", nombre);
            sql.Parameters.AddWithValue("@apaterno", apaterno);
            sql.Parameters.AddWithValue("@amaterno", amaterno);
            sql.Parameters.AddWithValue("@tipo", tipo);
            sql.Parameters.AddWithValue("@usuario", usuario);
            sql.Parameters.AddWithValue("@contrasenia", nueva);
            int i = sql.ExecuteNonQuery();

            if (i == 1)
            {
                MessageBox.Show("Usuario: " + usuario + " " + apaterno + " " + amaterno + " agregagdo");
            }
            else
            {
                MessageBox.Show("No se agrego el usuario");
            }
            conexionEstablecida.Close();
        }

        public void InsertarPregunta(String pregunta, String res1, String res2, String res3, String res4, string bandera)
        {
            if (bandera == string.Empty)
            {
                this.Enlace();
                conexionEstablecida.Open();
                SqlCommand sql = new SqlCommand("insert into pregunta values(@cuestion,@respuesta1,@respuesta2,@respuesta3,@respuesta4,'1')", conexionEstablecida);
                sql.Parameters.AddWithValue("@cuestion", pregunta);
                sql.Parameters.AddWithValue("@respuesta1", res1);
                sql.Parameters.AddWithValue("@respuesta2", res2);
                sql.Parameters.AddWithValue("@respuesta3", res3);
                sql.Parameters.AddWithValue("@respuesta4", res4);
                int i = sql.ExecuteNonQuery();
                if (i == 1)
                {
                    MessageBox.Show("La pregunta a quedado registrada");
                }
                else
                {
                    MessageBox.Show("Algo salio mal");
                }
                conexionEstablecida.Close();
            }
            else
            {
                this.Enlace();
                conexionEstablecida.Open();
                SqlCommand sql = new SqlCommand("update pregunta set cuestion=@cuestion,respuesta1=@respuesta1,respuesta2=@respuesta2,respuesta3=@respuesta3,respuesta4=@respuesta4 where idpregunta=@id", conexionEstablecida);
                sql.Parameters.AddWithValue("@cuestion", pregunta);
                sql.Parameters.AddWithValue("@respuesta1", res1);
                sql.Parameters.AddWithValue("@respuesta2", res2);
                sql.Parameters.AddWithValue("@respuesta3", res3);
                sql.Parameters.AddWithValue("@respuesta4", res4);
                sql.Parameters.AddWithValue("@id", bandera);
                int i = sql.ExecuteNonQuery();
                if (i == 1)
                {
                    MessageBox.Show("La pregunta se actulizo correctamente");
                }
                else
                {
                    MessageBox.Show("Algo salio mal");
                }
                conexionEstablecida.Close();
            }
        }

        public String Encriptacion(String contraseña)
        {
            String key = "mykey";

            byte[] keyarray;

            byte[] Arrreglo_normal = UTF8Encoding.UTF8.GetBytes(contraseña);

            MD5CryptoServiceProvider hashmd5 = new MD5CryptoServiceProvider();

            keyarray = hashmd5.ComputeHash(UTF8Encoding.UTF8.GetBytes(key));

            hashmd5.Clear();

            TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();

            tdes.Key = keyarray;

            tdes.Mode = CipherMode.ECB;

            tdes.Padding = PaddingMode.PKCS7;

            ICryptoTransform ctransform = tdes.CreateEncryptor();

            byte[] arrayresultado = ctransform.TransformFinalBlock(Arrreglo_normal, 0, Arrreglo_normal.Length);

            tdes.Clear();

            return Convert.ToBase64String(arrayresultado, 0, arrayresultado.Length);


        }

        public void EliminarUsuario(string bandera)
        {
            this.Enlace();
            conexionEstablecida.Open();
            SqlCommand sql = new SqlCommand("update usuario set activo=0 where id=@id", conexionEstablecida);
            sql.Parameters.AddWithValue("@id", bandera);
            int i = sql.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("El Usuario se elimino correctamente");
            }
            else
            {
                MessageBox.Show("Algo salio mal");
            }
            conexionEstablecida.Close();
        }

        public void EliminarPregunta(string bandera)
        {
            this.Enlace();
            conexionEstablecida.Open();
            SqlCommand sql = new SqlCommand("update pregunta set activo=0 where idpregunta=@id", conexionEstablecida);
            sql.Parameters.AddWithValue("@id", bandera);
            int i = sql.ExecuteNonQuery();
            if (i == 1)
            {
                MessageBox.Show("La pregunta se elimino correctamente");
            }
            else
            {
                MessageBox.Show("Algo salio mal");
            }
            conexionEstablecida.Close();
        }

        public void ActualizarPregunta(string nombre, string apaterno, string amaterno, string tipo, string usuario,string bandera)
        {
            this.Enlace();
            conexionEstablecida.Open();
            SqlCommand sql = new SqlCommand("update usuario set nombre=@nombre,apaterno=@apaterno,amaterno=@amaterno,tipo=@tipo where id=@id", conexionEstablecida);
            sql.Parameters.AddWithValue("@nombre", nombre);
            sql.Parameters.AddWithValue("@apaterno", apaterno);
            sql.Parameters.AddWithValue("@amaterno", amaterno);
            sql.Parameters.AddWithValue("@tipo", tipo);
            sql.Parameters.AddWithValue("@usuario", usuario);
            sql.Parameters.AddWithValue("@id", bandera);
            int i = sql.ExecuteNonQuery();

            if (i == 1)
            {
                MessageBox.Show("Usuario: " + usuario + " " + apaterno + " " + amaterno + " actulizado");
            }
            else
            {
                MessageBox.Show("No se actulizar el usuario");
            }
            conexionEstablecida.Close();
        }

        public void LlenarTabla()
        {
            
           
        }
    }
}
